#pragma once

#ifndef SMVector3_H
#define SMVector3_H

#include "Vector3SIMD.h"
#include "Vector3FLOAT.h"



#ifdef USE_SIMD_VECTOR //use SIMD vector
	#define SMVector3 Vector3SIMD
	#define SMVector3Add(V1, V2, R) Vector3SIMDAdd(V1, V2, R)
	#define SMVector3Sub(V1, V2, R) Vector3SIMDSub(V1, V2, R)
	#define SMVector3MulF(V1, F, R) Vector3SIMDMulF(V1, F, R)
	#define SMVector3Mul(V1, V2, R) Vector3SIMDMul(V1, V2, R)

	//dot product
	#define SMVector3Dot(V1, V2) Vector3SIMDDot(V1, V2)

	//normalize
	#define SMVector3Normalize(V, OUT) Vector3SIMDNormalize(V, OUT)

	//cross
	#define SMVector3Cross(V1, V2, R) Vector3SIMDCross(V1, V2, R)

#else //use classic vector
	#define SMVector3 Vector3FLOAT
	#define SMVector3Add(V1, V2, R) Vector3FLOATAdd(V1, V2, R)
	#define SMVector3Sub(V1, V2, R) Vector3FLOATSub(V1, V2, R)
	#define SMVector3MulF(V1, F, R) Vector3FLOATMulF(V1, F, R)
	
	//Multiplication between two vectors
	#define SMVector3Mul(V1, V2, R) Vector3FLOATMul(V1, V2, R)

	//dot
	#define SMVector3Dot(V1, V2) Vector3FLOATDot(V1, V2)

	//normalize
	#define SMVector3Normalize(V, OUT) Vector3FLOATNormalize(V, OUT)

	//cross
	#define SMVector3Cross(V1, V2, R) Vector3FLOATCross(V1, V2, R)
#endif


#endif